﻿using System;
using System.Collections.Generic;
using System.Text;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Shapes;
using Facebook;

static class Constants
{
	public const int MAX_MESSAGE = 150;
}

namespace WpfApplication1
{

    public class CLikes
    {
        public JsonArray data;
        public long count;

        public CLikes()
        {
            data = new JsonArray();
            count = 0;
        }
    }

    public class CComments
    {
        public JsonArray data;
        public long count;
        public CComments()
        {
            data = new JsonArray();
            count = 0;
        }
    }

    public class CComment : CType
    {
        public string message;
		public string Message
		{
			get
			{
				return message;
			}
		}
		
        public IDictionary<string, object> from;
		public BitmapImage Image_Profile
		{
			get
			{
				BitmapImage bm = new BitmapImage();
				bm.BeginInit();
				string urlPic = string.Format("https://graph.facebook.com/{0}/picture?type={1}", (string)from["id"], "square");
				bm.UriSource = new Uri(urlPic);
				bm.EndInit();
				return bm;	
			}
		}
		public string Name_Profile
		{
			get
			{
				return (string)from["name"];
			}
		}
        public string created_time;
        public CComment()
        {
        }
    }
    

    public class CType : Object
    {
        public string id; // id của status
        public bool isChecked = false;
        public CType()
        {
        }
    }

    //public class CPhoto : CType
    //{
    //    public IDictionary<string, object> from; // gồm name, id
    //    public IDictionary<string, object> to;
    //    public string message;
    //    public string story;
    //    public IDictionary<string, object> story_tags;
    //    public string picture;
    //    public string link; // link of photo
    //    public string name; // Sử dụng client gì
    //    public string icon;
    //    // Còn phần action nữa
    //    public string type;
    //    public string created_time;
    //    public string updated_time;
    //    public CLikes likes;
    //    public CComments comments;
		
    //    public string Header
    //    {
    //        get
    //        {
    //            if (story == null)
    //                return (string)from["name"]+" {pic}";
    //            else
    //                return story + " {pic}";
    //        }
    //    }
    //    public BitmapImage PicProfile_From
    //    {
    //        get
    //        {
    //            BitmapImage bm = new BitmapImage();
    //            bm.BeginInit();
    //            string urlPic = string.Format("https://graph.facebook.com/{0}/picture?type={1}", (string)from["id"], "square");
    //            bm.UriSource = new Uri(urlPic);
    //            bm.EndInit();
    //            return bm;
    //        }
    //    }
		
    //    public BitmapImage Picture
    //    {
    //        get
    //        {
    //            if (picture != null)
    //            {
    //                BitmapImage bm = new BitmapImage();
    //                bm.BeginInit();
    //                bm.UriSource = new Uri(picture);
    //                bm.EndInit();
    //                return bm;
    //            } else {
    //                BitmapImage bm = new BitmapImage();
    //                bm.BeginInit();
    //                bm.UriSource = new Uri("pack://application:,,,/Images/unknow_photo.png");
    //                bm.EndInit();
    //                return bm;
    //            }
    //        }
    //    }
    //    public string Time_Update
    //    {
    //        get
    //        {
    //            DateTime time = DateTime.ParseExact(updated_time, 
    //                             @"yyyy-MM-dd\THH:mm:ssK",
    //                             null);
    //            return time.ToString("hh:mm:ss tt dd-MM-yyyy");
    //        }
    //    }
		
    //    public string Message
    //    {
    //        get
    //        {
    //            if (message == null)
    //                return "";
    //            else
    //                return message;
    //        }
    //    }
    //    public string SortMessage
    //    {
    //        get
    //        {
    //            if (message != null)
    //            {
    //                if (message.Length > Constants.MAX_MESSAGE)
    //                {
    //                    return message.Substring(0, Constants.MAX_MESSAGE) + " ...[Read More]";
    //                }
    //                else
    //                    return message;
    //            }
    //            else return "";
    //        }
    //    }
    //    public string Message_Visibility
    //    {
    //        get
    //        {
    //            if (message == null)
    //                return "Collapsed";
    //            else
    //                return "Visible";
    //        }
    //    }
		
    //    public string Title
    //    {
    //        get
    //        {
    //            if (name == null)
    //                return "";
    //            else
    //                return name;
    //        }
    //    }
    //    public string Title_Visibility
    //    {
    //        get
    //        {
    //            if (name == null)
    //                return "Collapsed";
    //            else
    //                return "Visible";
    //        }
    //    }
    //    public bool IsChecked
    //    {
    //        get
    //        {
    //            return isChecked;
    //        }
    //        set
    //        {
    //            isChecked = value;
    //        }
    //    }
    //    public string Likes_Num
    //    {
    //        get
    //        {
    //            return likes.count.ToString();
    //        }
    //    }
		
    //    public string Comments_Num
    //    {
    //        get
    //        {
    //            return comments.count.ToString();
    //        }
    //    }
    //    public CPhoto()
    //    {
    //        // Insert code required on object creation below this point.
    //        likes = new CLikes();
    //        comments = new CComments();
    //    }
    //}

    //public class CStatus : CType
    //{

    //    public IDictionary<string, object> from;
    //    public IDictionary<string, object> to;
    //    public string message;
    //    public string story;
    //    public IDictionary<string, object> story_tags;
    //    // Thieu phan Action
    //    public string type;
    //    public string created_time;
    //    public string updated_time;
    //    public CLikes likes;
    //    public CComments comments;
    //    /// <summary>
    //    /// 
    //    /// </summary>
		
    //    public string Id
    //    {
    //        get
    //        {
    //            return id;
    //        }
    //    }
    //    public string Message
    //    {
    //        get
    //        {
    //            return message;
    //        }
    //    }
    //    public string SortMessage
    //    {
    //        get
    //        {
    //            if (message != null)
    //            {
    //                if (message.Length > Constants.MAX_MESSAGE)
    //                {
    //                    return message.Substring(0, Constants.MAX_MESSAGE) + " ...[Read More]";
    //                }
    //                else
    //                    return message;
    //            }
    //            else return "";
    //        }
    //    }

    //    public string Message_Visibility
    //    {
    //        get
    //        {
    //            if (message == null)
    //                return "Collapsed";
    //            else
    //                return "Visible";
    //        }
    //    }
    //    public bool IsChecked
    //    {
    //        get
    //        {
    //            return isChecked;
    //        }
    //        set
    //        {
    //            isChecked = value;
    //        }
    //    }
    //    public BitmapImage PicProfile_From
    //    {
    //        get
    //        {
    //            BitmapImage bm = new BitmapImage();
    //            bm.BeginInit();
    //            string urlPic = string.Format("https://graph.facebook.com/{0}/picture?type={1}", (string)from["id"], "square");
    //            bm.UriSource = new Uri(urlPic);
    //            bm.EndInit();
    //            return bm;
    //        }
    //    }

    //    public string Header
    //    {
    //        get
    //        {
    //            if (story == null)
    //                return (string)from["name"];
    //            else
    //                return story;
    //        }
    //    }
		
    //    public string Likes_Num
    //    {
    //        get
    //        {
    //            return likes.count.ToString();
    //        }
    //    }
		
    //    public string Comments_Num
    //    {
    //        get
    //        {
    //            return comments.count.ToString();
    //        }
    //    }
		
    //    public string Time_Update
    //    {
    //        get
    //        {
    //            DateTime time = DateTime.ParseExact(updated_time, 
    //                             @"yyyy-MM-dd\THH:mm:ssK",
    //                             null);
    //            return time.ToString("hh:mm:ss tt dd-MM-yyyy");
    //        }
    //    }
    //    public CStatus()
    //    {
    //        likes = new CLikes();
    //        comments = new CComments();
    //    }
    //}

    //public class CLink : CType
    //{
    //    public IDictionary<string, object> from;
    //    public IDictionary<string, object> to;
    //    public string message;
    //    public string story;
    //    public IDictionary<string, object> story_tags;
    //    public string picture;
    //    public string link; // link chia se
    //    public string name;
    //    public string caption;
    //    public string description;
    //    public string icon;
    //    // Thieu phan Action
    //    public string type;
    //    public string created_time;
    //    public string updated_time;
    //    public CLikes likes;
    //    public CComments comments;
		
    //    public BitmapImage PicProfile_From
    //    {
    //        get
    //        {
    //            BitmapImage bm = new BitmapImage();
    //            bm.BeginInit();
    //            string urlPic = string.Format("https://graph.facebook.com/{0}/picture?type={1}", (string)from["id"], "square");
    //            bm.UriSource = new Uri(urlPic);
    //            bm.EndInit();
    //            return bm;
    //        }
    //    }
		
    //    public string Description
    //    {
    //        get
    //        {
    //            if (description == null)
    //                return "";
    //            else
    //                return description;
    //        }
    //    }
    //    public string Description_Visibility
    //    {
    //        get
    //        {
    //            if (description == null)
    //                return "Collapsed";
    //            else
    //                return "Visible";
    //        }
    //    }

    //    public string Link_Visibility
    //    {
    //        get
    //        {
    //            if (link == null)
    //                return "Collapsed";
    //            else
    //                return "Visible";
    //        }
    //    }
    //    public string Caption
    //    {
    //        get
    //        {
    //            if (caption == null)
    //                return "";
    //            else
    //                return caption;
    //        }
    //    }
		
    //    public string Caption_Visbility
    //    {
    //        get
    //        {
    //            if (caption == null)
    //                return "Collapsed";
    //            else
    //                return "Visible";
    //        }
    //    }
    //    public string Title
    //    {
    //        get
    //        {
    //            if (name == null)
    //                return "";
    //            else
    //                return name;
    //        }
    //    }
    //    public string Title_Visibility
    //    {
    //        get
    //        {
    //            if (name == null)
    //                return "Collapsed";
    //            else
    //                return "Visible";
    //        }
    //    }
    //    public string Message
    //    {
    //        get
    //        {
    //            if (message == null)
    //                return "";
    //            else
    //                return message;
    //        }
    //    }
    //    public string SortMessage
    //    {
    //        get
    //        {
    //            if (message != null)
    //            {
    //                if (message.Length > Constants.MAX_MESSAGE)
    //                {
    //                    return message.Substring(0, Constants.MAX_MESSAGE) + " ...[Read More]";
    //                }
    //                else
    //                    return message;
    //            }
    //            else return null;
    //        }
    //    }
    //    public string Message_Visibility
    //    {
    //        get
    //        {
    //            if (message == null)
    //                return "Collapsed";
    //            else
    //                return "Visible";
    //        }
    //    }
    //    public bool IsChecked
    //    {
    //        get
    //        {
    //            return isChecked;
    //        }
    //        set
    //        {
    //            isChecked = value;
    //        }
    //    }
    //    public string Header
    //    {
    //        get
    //        {
    //            if (story == null)
    //                return (string)from["name"]+" {link}";
    //            else
    //                return story + " {link}";
    //        }
    //    }

    //    public BitmapImage Picture
    //    {
    //        get
    //        {
    //            if (picture != null)
    //            {
    //                BitmapImage bm = new BitmapImage();
    //                bm.BeginInit();
    //                bm.UriSource = new Uri(picture);
    //                bm.EndInit();
    //                return bm;
    //            } else {
    //                BitmapImage bm = new BitmapImage();
    //                bm.BeginInit();
    //                bm.UriSource = new Uri("pack://application:,,,/Images/unknow_photo.png");
    //                bm.EndInit();
    //                return bm;
    //            }
    //        }
    //    }
		
    //    public string Picture_Visibility
    //    {
    //        get
    //        {
    //            if (picture == null)
    //                return "Collapsed";
    //            else
    //                return "Visible";
    //        }
    //    }
		
    //    public string From_Name
    //    {
    //        get
    //        {
    //            return (string)from["name"];
    //        }
    //    }
		
    //    public string Likes_Num
    //    {
    //        get
    //        {
    //            return likes.count.ToString();
    //        }
    //    }
		
    //    public string Comments_Num
    //    {
    //        get
    //        {
    //            return comments.count.ToString();
    //        }
    //    }
    //    public string Time_Update
    //    {
    //        get
    //        {
    //            DateTime time = DateTime.ParseExact(updated_time, 
    //                             @"yyyy-MM-dd\THH:mm:ssK",
    //                             null);
    //            return time.ToString("hh:mm:ss tt dd-MM-yyyy");
    //        }
    //    }
		
    //    public CLink()
    //    {
    //        likes = new CLikes();
    //        comments = new CComments();
    //    }
    //}

    //public class CFriend : Object
    //{
    //    private string id;
    //    public string Id
    //    {
    //        get
    //        {
    //            return id;
    //        }
    //        set
    //        {
    //            id = value;
    //        }
    //    }
		
    //    public BitmapImage Pic_Profile
    //    {
    //        get
    //        {
    //            BitmapImage bm = new BitmapImage();
    //            bm.BeginInit();
    //            string urlPic = string.Format("https://graph.facebook.com/{0}/picture?type=square", id);
    //            bm.UriSource = new Uri(urlPic);
    //            bm.EndInit();
    //            return bm;
    //        }
    //    }

    //    private string name;
    //    public string Name
    //    {
    //        get
    //        {
    //            return name;
    //        }
    //        set
    //        {
    //            name = value;
    //        }
    //    }
    //    private string link;
    //    public string Link
    //    {
    //        get
    //        {
    //            return link;
    //        }
    //        set
    //        {
    //            link = value;
    //        }
    //    }
    //    private string birthday;
    //    public string Birthday
    //    {
    //        get
    //        {
    //            return birthday;
    //        }
    //        set
    //        {
    //            birthday = value;
    //        }
    //    }

    //    private IDictionary<string, object> location;
    //    public IDictionary<string, object> Location
    //    {
    //        get
    //        {
    //            return location;
    //        }
    //        set
    //        {
    //            location = value;
    //        }
    //    }

    //    private string gender;
    //    public string Gender
    //    {
    //        get
    //        {
    //            return gender;
    //        }
    //        set
    //        {
    //            gender = value;
    //        }
    //    }
		

    //    public CFriend()
    //    {

    //    }
    //}
    /*
     * PHẦN THẰNG THÀNH
     */
    public class CNote : CType
    {
        public string icon;
        public BitmapImage Icon
        {
            get
            {
                if (icon != null)
                {
                    BitmapImage bm = new BitmapImage();
                    bm.BeginInit();
                    bm.UriSource = new Uri(icon);
                    bm.EndInit();
                    return bm;
                }
                else
                {

                    BitmapImage bm = new BitmapImage();
                    bm.BeginInit();
                    bm.UriSource = new Uri("pack://application:,,,/Images/unknow_photo.png");
                    bm.EndInit();
                    return bm;

                }
            }
        }
        public BitmapImage PicProfile_From
        {
            get
            {
                BitmapImage bm = new BitmapImage();
                bm.BeginInit();
                string urlPic = string.Format("https://graph.facebook.com/{0}/picture?type={1}", (string)from["id"], "square");
                bm.UriSource = new Uri(urlPic);
                bm.EndInit();
                return bm;
            }
        }
        public string Name
        {
            get
            {
                return (string)from["name"];
            }
        }

        public string Id
        {
            get
            {
                return id;
            }
            set
            {
                id = value;
            }
        }
        public bool IsChecked
        {
            get
            {
                return isChecked;
            }
            set
            {
                isChecked = value;
            }
        }
        public string subject;
        public string Subject
        {
            get
            {
                return subject;
            }
        }
        public string message;
        public string Message
        {
            get
            {
                if (message == null)
                    return "";
                else
                    return message;
            }
        }
        public string SortMessage
        {
            get
            {
                if (message.Length > Constants.MAX_MESSAGE)
                {
                    return message.Substring(0, Constants.MAX_MESSAGE) + " ...[Read More]";
                }
                else

                    return message;
            }
        }
        public IDictionary<string, object> from;
        public IDictionary<string, object> to;
        public IDictionary<string, object> Cmt_num;
        public IDictionary<string, object> like_num;
        public string created_time;
        public string updated_time;
        public string Updated_time
        {
            get
            {
                DateTime time = DateTime.ParseExact(updated_time,
                                 @"yyyy-MM-dd\THH:mm:ssK",
                                 null);
                return time.ToString("hh:mm:ss tt dd-MM-yyyy");
            }
        }


        public CLikes likes;
        //public long Likes_Num
        //{
        //    get
        //    {
        //        return (long)like_num.Count;
        //    }
        //}

        public CComments comments;
        public long Comments_Num
        {
            get
            {
                return (long)Cmt_num.Count;
            }
        }
        public CNote()
        {
            likes = new CLikes();
            comments = new CComments();
        }

    }

    public class CPicture : CType
    {
        public CLikes likes;
        public CComments comments;
        private string id;
        public string Id
        {
            get { return id; }
            set { id = value; }
        }
        public IDictionary<string, object> from;
        // private string name;
        public string Name_From
        {
            get
            {
                return "from " + (string)from["name"] + "'s photos";
            }
        }
        public string Id_From
        {
            get { return (string)from["id"]; }
        }
        private IDictionary<string, object> tags;
        public List<object> data_tags
        {
            get { return (List<object>)tags["data"]; }
        }
        private string picture_link;
        public string Picture_link
        {
            get { return picture_link; }
            set { picture_link = value; }
        }
        public BitmapImage Picture
        {
            get
            {
                BitmapImage bm = new BitmapImage();
                bm.BeginInit();
                string urlPic = picture_link;
                bm.UriSource = new Uri(urlPic);
                bm.EndInit();
                return bm;
            }
        }
        private string updated_time;
        private string created_time;
        public string Time_Update
        {
            get
            {
                DateTime time = DateTime.ParseExact(updated_time,
                                 @"yyyy-MM-dd\THH:mm:ssK",
                                 null);
                return time.ToString("hh:mm:ss tt dd-MM-yyyy");
            }
        }
        public bool IsChecked
        {
            get
            {
                return isChecked;
            }
            set
            {
                isChecked = value;
            }
        }
        public string Likes_Num
        {
            get
            {
                return likes.count.ToString();
            }
        }

        public string Comments_Num
        {
            get
            {
                return comments.count.ToString();
            }
        }
        public string TextAlbum_Visibility
        {
            get
            {
                if (Get_loadSTT._load_stt == "album")
                    return "Collapsed";
                else
                    return "Visible";
            }
        }
        public CPicture()
        {
            likes = new CLikes();
            comments = new CComments();
        }
    }

    public class CAlbums : CType
    {
        public string ID
        {
            get
            {
                return id;
            }
            set
            {
                id = value;
            }
        }
        public IDictionary<string, object> from;
        public string name;
        public string Name
        {
            get
            {
                return (string)from["name"];
            }
        }
        public bool IsChecked
        {
            get
            {
                return isChecked;
            }
            set
            {
                isChecked = value;
            }
        }
        public string title;
        public string Title
        {
            get
            {
                return title;
            }
            set
            {
                title = value;
            }
        }
        public string description;
        public string Description
        {
            get
            {
                return description;
            }
            set
            {
                description = value;
            }
        }
        public string created_time;
        public string updated_time;
        public string Updated_time
        {
            get
            {
                DateTime time = DateTime.ParseExact(updated_time,
                                 @"yyyy-MM-dd\THH:mm:ssK",
                                 null);
                return time.ToString("hh:mm:ss tt dd-MM-yyyy");
            }
        }
        private string coverphoto_link = "pack://application:,,,/Images/NO PHOTOS.png";
        public string Coverphoto_link
        {
            get { return coverphoto_link; }
            set { coverphoto_link = value; }
        }
        public BitmapImage Coverphoto
        {
            get
            {
                BitmapImage bm = new BitmapImage();
                bm.BeginInit();
                string urlPic = coverphoto_link;
                bm.UriSource = new Uri(urlPic);
                bm.EndInit();
                return bm;
            }
        }
        //Kiểm tra xem album có bị hỏng hay không?
        private bool can_upload;
        public bool Can_upload
        {
            get { return can_upload; }
            set { can_upload = value; }
        }
        public CAlbums()
        {
            //likes = new CLikes();
            //comments = new CComments();
        }
        public string link;
        public string Link
        {
            get
            {
                return link;
            }
            set
            {
                link = value;
            }
        }
        public string likes = "0";
        public string comments = "0";
        public string Likes_Num
        {
            get
            {
                return likes;
            }
        }

        public string Comments_Num
        {
            get
            {
                return comments;
            }
        }
    }

    public class Get_loadSTT
    {
        public static string _load_stt = "";
        public string Load_stt
        {
            get { return _load_stt; }
            set { _load_stt = value; }
        }
    }
}